from ultralytics import YOLO
import os

os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"

if __name__ == "__main__":
    # 使用与部署一致的配置
    # model_path = r"E:\zhihao\2025文档\25年10月\ai_训练\权重\服务器上的权重\nanshan-fire-v3.pt"
    # model_path = r"E:\zhihao\2025文档\25年10月\ai_训练\权重\服务器上的权重\nanshan_fire_20251009.pt"
    # model_path = r"E:\zhihao\2025文档\25年10月\ai_训练\权重\服务器上的权重\fire_detect.pt"
    model_path = r"E:\zhihao\2025文档\25年10月\ai_训练\权重\服务器上的权重\best.pt"
    # valid_yaml = r"E:\zhihao\2025文档\25年10月\ai_训练\验证集\fire\fire_smoke\20251009\data.yaml"
    valid_yaml = r"E:\zhihao\2025文档\25年10月\ai_训练\验证集\fire\fire_smoke\20251013\data.yaml"

    # Load the model
    model = YOLO(model_path)

    # 根据您的部署配置进行验证
    # results = model.val(
    #     data=valid_yaml,
    #     classes=[0,1],  # 与部署配置一致
    #     conf=0.65,  # 使用部署时的置信度阈值！
    #     iou=0.3,  # 标准IoU阈值
    #     batch=9
    # )

    results = model.val(
        data=valid_yaml,
        # split='test',  # ← 使用测试集
        classes=[0, 1],
        # classes=None,
        conf=0.45,
        iou=0.5,
        batch=9
    )

    # 打印结果
    print("\n" + "=" * 50)
    print("=== 测试集评估结果 ===")
    print("=" * 50)
    print(f"mAP50: {results.box.map50:.4f}")
    print(f"mAP50-95: {results.box.map:.4f}")
    print(f"Precision (精确率): {results.box.mp:.4f}")
    print(f"Recall (召回率): {results.box.mr:.4f}")
    print(f"F1-Score: {2 * results.box.mp * results.box.mr / (results.box.mp + results.box.mr):.4f}")

    # 误判率分析
    print("\n=== 误判率分析 ===")
    print(f"False Positive Rate (误检率): {1 - results.box.mp:.4f}")
    print(f"False Negative Rate (漏检率): {1 - results.box.mr:.4f}")

    # results = model.val(data=valid_yaml, classes=[0], iou=0.3, batch=9)
    # print("=== 验证结果（与部署配置一致）===")
    # print(f"mAP50: {results.box.map50:.4f}")
    # print(f"mAP50-95: {results.box.map:.4f}")
    # print(f"Precision: {results.box.mp:.4f}")
    # print(f"Recall: {results.box.mr:.4f}")
